import pypinyin  # 汉字转拼音库（需提前安装：pip install pypinyin）

from pypinyin import lazy_pinyin, Style, load_single_dict
import os
from playsound import playsound  # 音频播放库（需提前安装：pip install playsound==1.2.2）
from config import Config
from global_vars import global_vars
from datetime import datetime

class SingleCharProcessor:
    def __init__(self):
        # 汉字笔画字典（简化版，实际可扩展为完整字典）
        self.stroke_dict = {
            "好": ["撇点", "撇", "横", "横撇/横钩", "竖钩", "横"],
            "学": ["点", "点", "撇", "点", "横撇/横钩", "pip横撇/横钩", "竖钩", "横"],
            "汉": ["点", "点", "提", "横撇/横钩", "捺"],
            # 可根据需求扩展更多常用汉字
        }
        self._load_custom_pinyin()

    def _load_custom_pinyin(self):
        # 自定义拼音字典：字符 -> 拼音
        custom_pinyin = {
            ord('凊'): 'qìng',
            ord('悌'): 'tì',
            ord('省'): 'xǐng',  # 此处为“问安”的读音
            # 可继续补充其他生僻字
        }
        load_single_dict(custom_pinyin)

    def process_single_char(self, char):
        """
        处理单个汉字：获取拼音、笔画
        :param char: 单个汉字字符串
        :return: 字典{"pinyin": 带声调拼音, "strokes": 笔画列表}，失败返回None
        """
        if len(char) != 1 or not char.isalpha():
            return None
        # 1. 获取带声调拼音（使用pypinyin库，Style.TONE表示带声调）
        pinyin_list = pypinyin.lazy_pinyin(char, style=Style.TONE)
        if not pinyin_list:
            return None
        pinyin = pinyin_list[0]

        # 2. 获取笔画（从字典中读取，无则返回默认提示）
        strokes = self.stroke_dict.get(char, ["暂未收录该汉字笔画"])

        # 3. 记录历史记录
        self.add_history(char, "single")

        return {"pinyin": pinyin, "strokes": strokes}

    def play_audio(self, char):
        """
        播放汉字发音：从音频目录读取对应音频文件（文件名格式：汉字.mp3）
        :param char: 单个汉字字符串
        """
        audio_file = os.path.join(Config.AUDIO_PATH, f"{char}.mp3")
        if os.path.exists(audio_file):
            try:
                playsound(audio_file)
            except Exception as e:
                print(f"播放音频失败：{e}")
        else:
            print(f"未找到{char}的音频文件")

    def add_history(self, content, record_type):
        """
        添加历史记录到全局变量，最多保留10条
        :param content: 处理的内容（单字/文本片段）
        :param record_type: 记录类型（"single"：单字，"text"：文本）
        """
        # 生成当前时间（格式：YYYY-MM-DD HH:MM:SS）
        current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        # 构造记录
        record = {
            "type": record_type,
            "content": content,
            "time": current_time
        }
        # 添加到全局变量，超过10条则删除最早的
        global_vars.history_records.insert(0, record)
        if len(global_vars.history_records) > 10:
            global_vars.history_records.pop()